CLaMP: Contrastive Language-Music Pre-training for Cross-Modal Symbolic Music Information Retrieval
https://scrapbox.io/files/6448d5920fb196001b193489.png
日付
2023/4/27
論文リンク
https://arxiv.org/abs/2304.11029
文献情報
CLaMP: Contrastive Language-Music Pre-training for Cross-Modal Symbolic Music Information Retrieval
Shangda Wu, Dingyao Yu, Xu Tan, Maosong Sun
MSRAインターン?
Muzicで実装あり:https://github.com/microsoft/muzic
要は何?
音楽(楽譜表現)と言語のクロスモーダル特徴表現.
問題意識と解決策
楽譜音楽はデータ不足しているので,言語によるセマンティック情報をもとにzero-shotなタスクができるように,
特徴表現をContrastive learningを用いて得るClampを提案.
言語と音楽の特徴が近くなるように学習.
手法
特徴として,
140万の音楽-テキストのペアを学習
Contrastive learning + data augmentation
また,新たなmusic-textのペアデータセットWikiMusicTextを提供.
Contrastive learning
https://scrapbox.io/files/644a7bdfb8fe45001b181d72.png
図の通り.バッチサイズNのtext-musicペアに対し,それぞれEncoderを通し,特徴量を得た後,ペアのベクトルの類似度(図中対角成分)を最大化し,ペアでないベクトルの類似度を最小化する.
ロス
https://scrapbox.io/files/644a7c6a7e3916001bf17e1b.png
https://scrapbox.io/files/644a7c99dd19dd001cb9879f.png yamamoto.icon texでどうやって出力すんだコレ
この記号はi≠jなら1, i=jなら0であることを示している
モデルの実装
Text encoder
DistilRoBERTa.RoBERTaの知識蒸留バージョン.
Text dropout
https://scrapbox.io/files/644a7e3fb8fe45001b183925.png
テキストに施すデータ拡張.一つのmusicに対してヒットするtext候補を増やしたり,記述ゆれへの頑健性の獲得に重要.
一つのmusicに対するdescriptionを構成する文のうち,L個の候補があるとしたら,それをシャッフルしてK個 = 1-Lのランダムをサンプルして学習させる.
yamamoto.icon どこかで使われてそうなテクニックに見えるが,特に引用なし.オリジナル?
Music encoder
https://scrapbox.io/files/644a7ee35d9a03001c10be0b.png
M3というMasked Language Modelに基づく音楽の言語モデル.
ABC notationを入力とする.
ABCを愚直に文字をトークンの最小単位とすると長くなる.MeasureVAE(https://archives.ismir.net/ismir2019/paper/000040.pdf )のようにBar単位としたい.
さらにVision Transformerのようなパッチ分割もとりいれる.これで効率化する.
各パッチは64文字となるようにした.
64に満たない場合PADのトークンで埋める.65を越えたら超えた部分を棄却.終わりにENDトークンを追加.
yamamoto.icon これで生じる損失は1.2%らしい.
ボキャブラリーとして ABCで用いられる95種類+3つの特殊トークン PAD, MASK, ENDの98種類が割り当てられる.
すなわち,各パッチは64*98のサイズの行列になる
yamamoto.icon ワンホット?
パッチはM3のEncoderによって768次元のベクトルに変換
M3 :図のようにMasked auto encoderのような枠組みで入力パッチをエンコードし,自己回帰Transformerデコーダーで入力を復元
実際使用する時はエンコーダーのみを使う
Masked language modelのような学習を行う.入力に対するノイズには以下を使用
マスキング 80%のパッチをMASKトークンで埋める.モデルはその部分を文脈から予測していき,そこで文脈性を獲得
シャッフル 10%のパッチに対し,パッチ内の文字をシャッフルする.(ex. 図内 |:F|をF: ||にシャッフル)
そのまま 残りの10%はそのままにして入力
可能になるタスク
https://scrapbox.io/files/644a83e0293061001b2a4c14.png
テキストを入力して合致する楽曲を探せるSemantic Searchと,音楽を入力してテキストの形で属性を推定するZero-shot classificationが考えられる.
データセット
WEBMusicText dataset
140万のmusic-textペアデータを構築.クローリングによって得たと述べている
yamamoto.icon がどこのデータなのか詳細はなし.MSRAの歌詞生成のやつもこうだった.そういうとこやぞ
前処理と
得た楽譜データを全てABC notationに変換(MusicXML,Lilypondもふくまれていたらしい)し,歌詞やタイトル等を除去して音符だけが含まれるようにする.
テキストは対応するメタデータやユーザーコメントを利用
実験とその結果
Semantic SearchとZero-shot Classificationで検証.
この検証用のためのデータセットWikiMusicText datasetを構築.(こちらは公開: https://huggingface.co/datasets/sander-wood/wikimt ) textにはアーティスト,タイトル,ジャンル,記述が含まれている.楽譜側とタイトル・アーティストがあうかどかでマッチング.記述はBARTで要約
さらに,VGMIDI(https://github.com/lucasnfe/vgmidi )とPianist8(https://arxiv.org/pdf/2107.05223.pdf (MIDIBERT-Pianoで利用))も利用
比較モデル
特にzero-shot classification
MusicBERT:これもMSRAからのモデル.楽譜に対する事前学習済みモデル.
M3:Contrastive learningなし.ABCのmax文字数 512と1024を検証.6層のエンコーダー部分を利用.
Clamp:提案モデル.ablationとしてText dropoutなし(w/o TD),ランダムに初期化したmusic encoder(w/o M3),Bar patchingとM3なし(w/o M3, BP),これもmax文字数512と1024
事前学習
M3:エンコーダー6層,デコーダー3層 mask ratio 45%
Clamp: 20epoch, AdamW
バッチサイズ640,MPで学習
Semantic searchの結果
https://scrapbox.io/files/644a8894084b3e001bf29c21.png
フルモデルがベスト -> 全ての工夫が重要,特にM3による事前学習が意味的な重要であると考えられた.
また,シーケンス長を長くしても効果はなし -> エンコードしているからであると考察.
Zero-shot classificationの結果
Linear probe: 特徴量+linear classifierをファインチューニング
Zero-shot:プロンプトによる生成(詳細は付録B)
https://scrapbox.io/files/644a88ab0d9f83001bb2279b.png
WikiMT,VGMIDIではMusicBERTのファインチューニングよりもclampのzero-shotの方が性能を上回ったものも
clampでファインチューニングをすればさらに性能向上
一方,pianist8は元のデータperformance midiであるため対応できなかった.今後はこのようなデータにも対応できるよう規模を拡大したい,とのこと
コメント
イントロの書き方が微妙だと思った.zero-shot music-text(Won et al 2021, Choi et al. 2019)の研究をなぞってる感.「なぜSymbolicでやるのが重要か」という部分が欠落していると思った.研究がaudioと比べて盛んでないのはデータが少ないことだけが問題だとは思わない.(〇〇で使われている,の研究も時代がちょっと前で今はほとんどオーディオに置き換えられているし,)work自体はすごくworthyだと思うのでがんばってほしい.
モデル自体はよく考えられているなと思った.特にMLMのノイズの与え方が,マスクで(ある程度の)大域の,シャッフルで局所の特徴を学習できるってことと解釈したけど,理にかなってるなと思った
これフォーマットが某⛲️と同じだが,これ査読中なのか?ダブルブラインドだったはずだが...